package io.github.mymonstercat.tools.model;

import lombok.Data;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * @author wry
 */
@Data
public class AiResponse {
    /**
     * 发起请求时必须是奇数个元素, 返回数据时必须是偶数个元素
      */
    private List<Chat> messages;

    private List<String> data;

    /**
     * 输出内容标识，说明：
     * · normal：输出内容完全由大模型生成，未触发截断、替换
     * · stop：输出结果命中入参stop中指定的字段后被截断
     * · length：达到了最大的token数，根据EB返回结果is_truncated来截断
     * · content_filter：输出内容被截断、兜底、替换为**等
     * · function_call：调用了funtion call功能
     */
    private String finishReason;

    /**
     * 当前生成的结果是否被截断
      */
    private Boolean isTruncated;

    /**
     * 表示用户输入是否存在安全，是否关闭当前会话，清理历史会话信息
     * true：是，表示用户输入存在安全风险，建议关闭当前会话，清理历史会话信息
     * false：否，表示用户输入无安全风险
     */
    private Boolean needClearHistory;

    /**
     * 当need_clear_history为true时，此字段会告知第几轮对话有敏感信息，如果是当前问题，ban_round=-1
      */
    private int banRound;

    private List<String> errors;

    public AiResponse(List<Chat> messages, String responseText, List<String> data, List<String> errors) {
        if (messages != null) {
            this.messages = messages;
            this.respText(responseText);
        }
        this.data = data;
        this.errors = errors;
    }

    public void respText(String respText) {
        if (StringUtils.isEmpty(respText)) {
            return;
        }
        Chat chat = Chat.assistant(respText);
        this.messages.add(chat);
    }
}
